class: center middle main-title section-title-8 top-logo .small[ # Regresión Lineale Múltiple ] .class-info[ <br> **Sesión N° 9**<br> 12 octubre 2021<br> **Análisis de datos estadísticos en R** <br> .pull-right.small[ **Profesora** Valentina Andrade de la Horra <br> **Ayudantes** Dafne Jaime y Nicolás Godoy .tiny[Universidad Alberto Hurtado<br> ] ] ] --- class: title title-inv-5 # Contenidos Sesión 9 -- .box-1.medium.sp-after-half[**Construcción modelo regresión lineal**] -- .box-2.medium.sp-after-half[**Modelamiento con srvyr**] -- .box-3.medium.sp-after-half[**Predictores categóricos**] -- .box-4.medium.sp-after-half[**Extraer información**] -- -- .box-6.medium.sp-after-half[**Representación gráfica**] .box-6.small.sp-after-half[*Tablas*] .box-6.small.sp-after-half[*Gráficos*] --- class: center middle main-title section-title-1 top-logo name: basics # Modelo de regresión lineal --- class: title title-1 # Modelo de regresión lineal - Herramienta de análisis poderosa en ciencias sociales -- - Permite generalizar relaciones entre variables -- | | `\(Y\)` | `\(X\)` | |---|---|---| | | Explicada | Explicativa | | | Dependiente | Independiente | | | Respuesta | Control | | | Predicha | Predictora | | | Regresando | Regresor | --- class: title title-1 # Modelo de regresión lineal **Algunas propiedades básicas y clave** 1. `\(Y\)` de carácter continuo 2. `\(X_i\)` relación lineal con `\(Y\)` (*Supuesto N°2 Teorema Gauss Markow*) 3. Muestreo aleatorio para recolección de datos - Otros: *colinealidad imperfecta, homocedasticidad, esperanza condicional de residuos cero, i.i.d*. --- class: title title-1 # RLM en R .can-edit[ ```r *lm(formula = , data = , weights = ) ``` ] --- class: title title-8 #Recursos de la práctica - Este práctico fue trabajado con datos de [CASEN 2020](http://observatorio.ministeriodesarrollosocial.gob.cl/encuesta-casen-en-pandemia-2020). - Los datos ya fueron procesados anteriormente, para centrar el trabajo en el cálculo de parámetros. - Al trabajar con muestras complejas, es **fundamental** asegurarnos de: + Recodificar correctamente los valores de cada variable + Eliminar los valores nulos de los datos + Transformar cada variable a su datatype correspondiente - Pueden revisar el *script de procesamiento* en la carpeta **R** --- class: center middle main-title section-title-8 top-logo name: basics # 1: Flujo del RProject --- class: title title-inv-8 # Etapas del flujo .center[ ] -- - *Hoy* nosotras/os nos centraremos en la parte de **análisis**. --- class: title title-inv-8 # Orden de un script de análisis .center[ ] --- .center[ ] Figura 1: Estudiantes de Análisis de datos en R haciendo los **pasos 4 y 5.** --- class: center middle main-title section-title-8 top-logo # Paso 1: Cargar paquetes --- layout: true class: title title-8 --- # Paso 1: Cargar paquetes ```r pacman::p_load(tidyverse, #Universo de paquetes sjmisc, #Para explorar datos srvyr, #Para trabajar con muestras complejas dplyr, #Para manipular datos tidyr) #Para transformar la estructura de los datos ``` --- layout: false class: center middle section-title section-title-8 animated fadeIn # Paso 2: Importar datos --- # Consideraciones antes de importar datos Para **importar** los datos en R debemos tener en consideración tres cosas: .can-edit.key-likes[ 1. 2. 3. ] --- # Consideraciones antes de importar datos Para **importar** los datos en R debemos tener en consideración tres cosas: 1. Cómo se llaman los datos (en nuestro caso casen_proc); 2. El formato de nuestros datos (en nuestro caso .rds); y 3. El lugar de donde están alojados nuestros datos (en este caso, desde GitHub). --- # Paso 2: Importar datos ```r data <- readRDS(url("https://github.com/learn-R/07-class/blob/main/input/data/casen_proc.rds?raw=true")) ``` --- class: center middle main-title section-title-8 top-logo # Como resultado .large.box-inv-1[Nuevo objeto en el Enviroment] --- class: center middle section-title section-title-8 animated fadeIn # Paso 3: Explorar datos --- class: center title title-8 # Explorar datos ¡Recordemos! .box-inv-1[Para variables categóricas: `frq()`] -- .box-inv-3[Para variables continuas: `descr()`] -- En la tarea de explorar los datos, la librería `sjmisc` será nuestra mejor aliada --- # Explorar datos para procesar ```r ## Variables categóricas frq(data$region) #Examinamos la columna región frq(data$pobreza) #Examinamos la columna pobreza frq(data$sexo) #Examinamos la columna sexo ``` --- # Explorar datos para procesar ```r ## Variables continuas descr(data$exp) #Ponderador regional sum(data$exp) #Total de la población descr(data$varstrat) #Estrato de varianza descr(data$varunit) #Conglomerado de varianza descr(data$ing_tot_hog) #Ingreso total del hogar ``` --- layout: false class: center main-title section-title-8 top-logo # ¡Continuemos con la creación del objeto encuesta! --- layout: false class: center middle main-title section-title-8 top-logo # Pero antes... --- # ¿Qué es un objeto encuesta? .box-inv-1[Es una lista creada con la función `as_survey_design` de `srvyr`] -- .box-inv-2[En este caso, la lista contiene 9 elemento diferentes] -- .box-inv-3[Si bien su contenido es algo críptico, crear el objeto encuesta es crucial, pues nos permitirá trabajar con los datos como si fuese un dataframe] --- class: center title title-8 # Creando el objeto encuesta ```r obj_encuesta <- data %>% #Creamos un nuevo objeto encuesta con la información de nuestros datos as_survey_design(ids = conglomerado, #Aplicamos diseño muestral, especificando los ids a partir del conglomerado de varianza, strata = estrato,#strat con los estratos de varianza, fpc = nestrato, #especificando que la estimación está corregida con una población finita (cuando se pueda), weights = ponderador) #y los ponderadores con weights ``` --- class: center title title-8 # Objeto encuesta  --- class:center title title-8 # ¿Por qué trabajar con objetos encuesta? .box-inv-3[Los distintos argumentos especifican elementos del diseño muestral] -- .box-inv-4[Así, podremos realizar estimaciones mucho más precisas] -- .box-inv-5[Además de conocer el nivel de error de estas] --  --- class: center title title-8 # Creando el objeto encuesta En CASEN 2020 no viene incluida la variable fpc, por lo que debemos crearla ```r data <- data %>% group_by(varstrat) %>% #Agrupando por varstrat mutate(stratn = sum(exp)) %>% #Calculamos el total de personas por estrato ungroup() #¡No olvidemos desagrupar! ``` --- class: center title title-8 # Creando el objeto encuesta (¡por fin!) En CASEN 2020 no viene incluida la variable fpc, por lo que debemos crearla ```r casen_regional <- data %>% #Creamos un nuevo objeto llamado casen_regional con la información de data as_survey_design(ids = varunit, #Aplicamos diseño muestral, especificando los ids a partir de varunit, strata = varstrat,#los estratos a partir de varstrat, fpc = stratn, #especificando que la estimación es con una población finita weights = exp) #y los ponderadores con exp ``` --- class: center title title-8 # Las ventajas de `srvyr` .box-inv-5[Existen otras librerías que nos permiten crear objetos encuesta] -- .box-inv-6[Sin embargo, nos quedamos con `srvyr` ¿por qué?] -- .box-inv-7[Nos permite dialogar con librerías conocidas, como `dplyr`] -- .box-inv-2[¡Sin considerar la simpleza de los cálculos!] --- layout: false class: center main-title section-title-8 top-logo # ¡A calcular! --- class: title title-8 # ¿Qué calcularemos? - `srvyr` provee de muchas funciones para cálculos de diferentes estadísticos - No obstante, aquí calcularemos **medias**, **proporciones** y **totales** -- .box-inv-1[Son los estadísticos más usuales de reportar] -- .box-inv-2[además de ser **insesgados**] -- - Entonces, emplearemos `survey_mean()`, `survey_prop()` y `survey_total()` --- # Cálculo de medias `survey_mean()` ```r ## Cálculo simple casen_regional %>% #Con casen_regional summarize(ing_medio = srvyr::survey_mean(ing_tot_hog, na.rm=T)) #Calculamos el ingreso medio poblacional ``` --- # Comparamos con el cálculo a nivel muestral ```r data %>% #Con data summarise(ing_medio = mean(ing_tot_hog, na.rm=T)) #Calculamos el ingreso medio muestral ``` --- # Incorporamos Intervalos de Confianza al 95% ```r casen_regional %>%#Con casen_regional summarise(ing_medio = survey_mean(ing_tot_hog, vartype = "ci", na.rm=T)) #Calculamos el #ingreso medio poblacional, #y sus intervalos de confianza ``` ??? x --- # ¿Y si queremos otro nivel de confianza? ```r casen_regional %>% #Con casen_regional summarise(ing_medio95 = survey_mean(ing_tot_hog, vartype = "ci", level = .95, na.rm=T), #Al 95% ing_medio99 = survey_mean(ing_tot_hog, vartype = "ci", level = .99, na.rm=T)) #Al 99% ``` ??? x --- # Agrupamos por sexo (¡como con dplyr!) ```r casen_regional %>% #Con casen_regional group_by(sexo) %>% #Agrupamos por sexo summarise(ing_medio = survey_mean(ing_tot_hog, vartype = "ci", na.rm=T)) #Calculamos el ingreso medio #poblacional, y sus intervalos de #confianza ``` --- # ¡Transformemos en wide con `tidyr`! ```r ing_region <- casen_regional %>% group_by(sexo) %>% #Agrupamos por region summarise(ing_medio = survey_mean(ing_tot_hog, vartype = "ci", na.rm=T)) %>% #Calculamos el ingreso medio poblacional, y sus intervalos de confianza select(sexo, ing_medio) %>% #Seleccionamos region e ing_medio pivot_wider(names_from = "sexo", #Pivoteamos, extrayendo los nombres de las columnas desde region values_from = "ing_medio") #Y los valores desde ing_medio ``` --- # Cálculo de proporciones con `survey_prop()` .box-inv-2[Una diferencia con `survey_mean()`: ¡Debemos agrupar por la(s) variable(s) categórica(s) de interés!] ```r ## Cálculo simple casen_regional %>% #Con casen_regional group_by(pobreza) %>% #Agrupamos por pobreza summarise(prop = survey_prop(na.rm = T)) #Y calculamos las proporciones ``` --- # Transformando a porcentaje (%) con `mutate()` ```r ## Transformando a porcentaje casen_regional %>% #Con casen_regional group_by(pobreza) %>% #Agrupamos por pobreza summarise(prop = survey_prop(na.rm = T))%>% #Calculamos las proporciones mutate(per = prop*100) #Creamos una nueva columna multiplicando las proporciones *100 para obtener porcentajes ``` --- # Incorporamos los totales con `survey_total()` ```r ## Incorporamos cálculo de frecuencias casen_regional %>% #Con casen_regional group_by(pobreza) %>% #Agrupamos por pobreza summarise(prop = survey_prop(na.rm = T), #Calculamos las proporciones total = survey_total(na.rm=T))%>% #Y el total por categorías mutate(per = prop*100) #Creamos una nueva columna multiplicando las proporciones *100 para obtener porcentajes ``` --- # Y los Intervalos de Confianza al 95% ```r ## Con Intervalos de confianza al 95% casen_regional %>% #Con casen_regional group_by(pobreza) %>% #Agrupamos por pobreza summarise(prop = survey_prop(vartype = "ci", na.rm = T)) #Incorporamos intervalos de confianza ``` --- # ¡También podemos transformarlos en porcentajes! ```r ## Transformamos el estimador puntual y los límites del intervalo a porcentajes ## Incorporamos el total casen_regional %>% #Con casen_regional group_by(pobreza) %>% #Agrupamos por pobreza summarise(prop = survey_prop(vartype = "ci", na.rm = T), #Calculamos las proporciones con intervalos de confianza total = survey_total(vartype = "ci", na.rm=T)) %>% #Así como el total por categoría mutate(prop = prop*100, #Multiplicamos las proporciones *100, prop_low = prop_low*100, #así como el límite inferior prop_upp = prop_upp*100) #y superior, para obtener porcentajes ``` --- # Cruzamos variables ```r ## Cruzar dos variables casen_regional %>% #Creamos un objeto llamado pobreza_reg con datos de casen_regional group_by(pobreza, sexo) %>% #Agrupamos por pobreza y sexo summarise(prop = survey_prop(vartype = "ci", na.rm = T), #Calculamos las proporciones con intervalos de confianza total = survey_total(vartype = "ci", na.rm=T)) %>% #Así como el total por categoría mutate(prop = prop*100) ``` --- # ¡Transformemos en wide con `tidyr`! ```r ## Crear objeto wide pobreza_reg <- casen_regional %>% #Creamos un objeto llamado pobreza_reg con datos de casen_regional group_by(region, pobreza) %>% #Agrupamos por region y pobreza summarise(prop = survey_prop(vartype = "ci", na.rm = T), #Calculamos las proporciones con intervalos de confianza total = survey_total(vartype = "ci", na.rm=T)) %>% #Así como el total por categoría mutate(per = prop*100) %>% #Multiplicamos las proporciones *100 para obtener porcentajes select(region, pobreza, per, total) %>% #Seleccionamos region, pobreza, per y total pivot_wider(names_from = "pobreza", #Pivoteamos a lo ancho, extrayendo los nombres de las columnas desde pobreza values_from = c("per", "total")) #y los valores desde per y total ``` --- layout: false class: center section-title section-title-8 animated fadeIn # En síntesis -- .box-2.medium.sp-after-half[**Diseño muestral complejo**] -- .box-3.medium.sp-after-half[**El diseño muestral de CASEN 2020**] -- .box-4.medium.sp-after-half[**Creación de objetos encuesta con srvyr**] -- .box-5.medium.sp-after-half[**Estimación, inferencia y tabulado**] --- class: center middle main-title section-title-4 top-logo # ¡Y a no olvidar el flujo para el análisis! -- ## Nos permite hacernos amigas/os más rápido del programa --- .center[ ] --- layout: false .box-1[¿Y eso era?] -- .box-inv-1[¡Ahora si que si! Nos vemos el próximo lunes] .center[ ] --- layout: false class: center middle main-title section-title-8 top-logo .small[ # Muestras complejas y precisión de inferencia estadística ] .class-info[ <br> **Sesión N° 8**<br> 12 octubre 2021<br> **Análisis de datos estadísticos en R** <br> .pull-right.small[ **Profesora** Valentina Andrade de la Horra <br> **Ayudantes** Dafne Jaime y Nicolás Godoy .tiny[Universidad Alberto Hurtado<br> ] ] ] ??? https://c.tenor.com/7mxJp29REVkAAAAC/scaryfeet-monstersinc.gif